#ifndef PLACEMENT_SOLVER_H
#define PLACEMENT_SOLVER_H

#include "Cube.h"
#include <cassert>
#include <vector>
#include <string>

// Solver of Placement provided for users
class Placement_Solver
{
private:
    std::vector<Cube> data_;
    int origin_total_volume_, bouding_volume_;
    int ansx_, ansy_, ansz_;
    int time_limitation_;
public:
    Placement_Solver() : time_limitation_(600) {}
    Placement_Solver(int time_limitation) : time_limitation_(time_limitation) {} 
    ~Placement_Solver() {}

    void LoadCube(const std::vector<Cube> &);            // Load Cube set from vector 
    void LoadCube(const std::string &);                  // Load Cube set from file
    void LoadCube();                                     // Load Cube set from stdio
    void Solve();                                        // Solve Cube placement
	void GetCube(std::vector<Cube> & data);              // Get the solution
    void Output(std::string File_Name = "Output.txt");   // Output the answer to file
};

#endif  /* PLACEMENT_SOLVER */
